#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

// 定义条件变量和互斥锁
pthread_mutex_t lock;
pthread_cond_t cond_A;
pthread_cond_t cond_B;
bool count = false; // 通过count控制AB交替

// 线程A的打印函数
void *print_A(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&lock);
        while (!count)
        {
            pthread_cond_wait(&cond_A, &lock);
        }
        std::cout << "我是线程A" << std::endl;

        // 唤醒线程B:
        count = true;
        pthread_cond_signal(&cond_B);
        pthread_mutex_unlock(&lock);

        sleep(1);
    }
}

// 线程B的打印函数
void *print_B(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&lock);
        while (count)
        {
            pthread_cond_wait(&cond_B, &lock);
        }
        std::cout << "我是线程B" << std::endl;

        // 唤醒线程A:
        count = false;
        pthread_cond_signal(&cond_A);
        pthread_mutex_unlock(&lock);

        sleep(1);
    }
}

int main()
{
    pthread_t tid_A, tid_B;

    // 初始化互斥锁和条件变量
    pthread_mutex_init(&lock, nullptr);
    pthread_cond_init(&cond_A, nullptr);
    pthread_cond_init(&cond_B, nullptr);

    // 创建线程A B
    pthread_create(&tid_A, nullptr, print_A, nullptr);
    pthread_create(&tid_B, nullptr, print_B, nullptr);


    return 0;
}